//依赖背包
//dependent_pack.cpp

//给定固定背包最大承重w，选择集s有n个物品
//s[i]物品的价值是v[i]，重量(费用)是w[i]
//每种物品只能选1个或0个，不能切割
//这是01背包的问题描述，这里唯一不同的是：
//1)有些物品是主物品，有些是附属物品
//主物品可以无条件选择而附属物品只有在选择它的主物品之后才能选择
//2)不过，这些依赖关系并非那么随意的，依赖包只能依赖一个主物品
//主物品不能依赖别的主物品，也就是说这些包之间的关系最多就只是两层树，不会多层
//一个主物品可以有多个附属物品
//
//求出背包可以装载的最大价值

//对于每个物品：
//可以不选
//可以选主物品
//可以选主物品+一个附属物品，即在这个主物品的所有附属物品中只能选择一个
//其他的附属物品都没办法选了
//具体实现：
//对于每个主物品和它的所有附属物品，当做一个物品集
//对这个物品集中的所有附属物品进行一次01背包动规，除过主物品
//得到从0到w重量的价值数组v[MAX]
//然后进行动规的时候，考虑这个主物品及其附属物品集
//不选择，选择主物品，选择主物品和一个附属物品，这三种情况都可以进行动规了
//扩展情况：
//如果这些主物品和附属物品之间没有这样严格的关系
//物品之间的关系组成了一棵多叉树，就成为了树形动态规划问题
//动规的具体算法见树形动态规划一节

//int dependent_pack(object *t, int n, int w)
